Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.09.2018, 14:35
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Интересная штука с Promise.all
Добрый день.
К примеру, в цикле я создаю массив промисов, которые выполняют get запрос, и на каждой итерации немного меняется url запроса.
var arr = [];
        for (let i=1; i<=10; i++){
            arr[i] = new Promise((resolve,reject)=>{
                var xhr = new XMLHttpRequest();
                xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/'+i, true);
                xhr.onload = function() {
                    if (this.status === 200) {
                        resolve(this.response);
                    } else {
                        var error = new Error(this.statusText);
                        error.code = this.status;
                        reject(error);
                    }
                };
                xhr.onerror = function() {
                    reject(new Error("Network Error"));
                };
                xhr.send();
            });
        }
        Promise.all(arr).then(
            (resolve) => {
                console.log("Ответ сервера: " + resolve)
            },
            (reject) => {
                console.log("Ошибка: " + reject)
            }
        );

Этот код работает, можете прям в консоли браузера запустить.

Но если вместо стандартного XHR использовать $.ajax, почему то работать всё перестаёт (если быть точным, вместо объектов в консоль выводится их стандартный метод toString - [object Object]):
var arr = [];
        for (let i=1; i<=10; i++){
            arr[i] = new Promise((resolve,reject)=>{
               $.ajax({
                    url: 'https://jsonplaceholder.typicode.com/users/'+i,
                    success: function (data) {
                        resolve(data);
                    },
                    error: function (jqXHR, textStatus) {
                        reject(textStatus);
                    }
                })
            });
        }
        Promise.all(arr).then(
            (resolve) => {
                console.log("Ответ сервера: " + resolve)
            },
            (reject) => {
                console.log("Ошибка: " + reject)
            }
        );

То же можно запустить в консоле.

Кто скажет - в чём дело?
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2018, 14:44
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,831

kvizor34,
Сообщение от kvizor34
Кто скажет - в чём дело?
В типе данных ответа.
xhr возвращает строку, jq в зависимости от заголовков ответа может вернуть и объект, и массив.

Плюсик на запятую в методе log объекта console поменяйте.
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2018, 14:48
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Решено, разный тип данных
Сообщение от Nexus Посмотреть сообщение
kvizor34,
В типе данных ответа.
Благодарю! буду знать.
Это получается что в первом случае (через xhr) я вижу в консоли просто красиво структурированную строку, верно?
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2018, 14:53
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,831

kvizor34, да.

Upd. https://developer.mozilla.org/en-US/...quest/response
XMLHttpRequest.response ведет себя также.

Протестировал ваш код, что xhr, что jq возвращают массив строк и, соответственно, выводятся в консоли адекватно.
Т.е. не увидел описанной вами проблемы.

Последний раз редактировалось Nexus, 13.09.2018 в 14:59.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2018, 22:18
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

// console.log("Ответ сервера: " + resolve)
console.log("Ответ сервера: ")
console.log(resolve)
// или
console.log("Ответ сервера: ", resolve)
// и можно посмотреть typeof что-то там
console.log(typeof resolve)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу андройд программистов. Работа интересная. Высокая оплата. HGeen91 Работа 0 04.06.2017 03:25
Самая интересная библиотека Илья Кантор Сайт Javascript.ru 43 17.09.2015 19:04
Есть интересная идея! allonemoon Оффтопик 2 08.04.2015 17:12
flash media server интересная все таки штука.... Sadist_dead Flash 4 07.12.2011 21:17
Вот такая штука нужна mycoding Сайт Javascript.ru 4 16.11.2010 12:50